﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NorthWind.Entity;
using NorthWind.LocalLogic;

namespace NorthWind.Win
{
    public partial class frmDocumento : Form
    {
        

        public frmDocumento()
        {
            InitializeComponent();
        }


        private void SeleccionarCliente() { 

            //seleccionar cliente
            frmCliente oFrmCliente = new frmCliente();
            oFrmCliente = SingletonFormProvider.GetInstance<frmCliente>(this);
            oFrmCliente.MdiParent = Principal.ActiveForm;   

                oFrmCliente.OnClienteSeleccionado += 
                        new EventHandler<TbClienteBE>(
                        Cliente_OnClienteSeleccionado
                        );
                oFrmCliente.Show();
        }


     
      

        private void SeleccionarProducto()
        {

            //seleccionar producto
            frmProducto oFrmProducto = new frmProducto();
            oFrmProducto = SingletonFormProvider.GetInstance<frmProducto>(this);
            oFrmProducto.MdiParent = Principal.ActiveForm; 
            
            //asociamos el evento con un metodo +=
            oFrmProducto.OnProductoSeleccionado +=
                new EventHandler<TbProductoBE>(
                Producto_OnProductoSeleccionado
                );
            oFrmProducto.Show();



        }

        TbClienteBE otmpCliente;
        void Cliente_OnClienteSeleccionado( object sender, TbClienteBE e) 
        {
            txtcliente.Text = e.Nombre;
            txtruc.Text = e.Ruc;
            otmpCliente = e;
        }

        TbProductoBE otmpProducto;
        void Producto_OnProductoSeleccionado(object sender, TbProductoBE e)
        {
            txtproducto.Text = e.Descripcion ;
            txtprecio.Text = e.Precio.ToString();
            otmpProducto = e;
        }


        //cliente eventos click y teclas
        private void button1_Click(object sender, EventArgs e)
        {
            //mostrar formulario cliente
            SeleccionarCliente();
        }

        private void txtcliente_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F4) SeleccionarCliente();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            SeleccionarProducto();
        }



        //producto eventos click y teclas
        private void txtproducto_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F4) SeleccionarProducto();
        }

        private void txtproducto_DoubleClick(object sender, EventArgs e)
        {
            SeleccionarProducto();
        }

        private void txtcliente_DoubleClick(object sender, EventArgs e)
        {
            SeleccionarCliente();
        }


        FacturacionBL oFacturacionBL = new FacturacionBL();

        private void button4_Click(object sender, EventArgs e)
        {   try{
            
            
            oFacturacionBL.AgregarDetalle(new ItemBE()
            {
           
                Cantidad = Convert.ToDecimal(txtcantidad.Text),
                Precio = Convert.ToDecimal(txtprecio.Text),
                Producto = otmpProducto
               
            });

        }
        catch (FormatException)
        {
            Console.WriteLine("Alguno de los datos no ha sido escrito");
        }

            dataGridView1.DataSource = null;
            dataGridView1.DataSource = oFacturacionBL.GetDetalle();

            txtsubtotal.Text = oFacturacionBL.SubTotal.ToString();
            txtigv.Text = oFacturacionBL.IGV.ToString();
            txttotal.Text = oFacturacionBL.Total.ToString();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //Guardar Documento en la BD       
            DocumentoBE oDocumentoDTO = new DocumentoBE();
            //Creamos la cabecera
            CabDocumentoBE oCabDocumentoDTO = new CabDocumentoBE();
            //Agregamos los datos a la cabecera
            oCabDocumentoDTO.Cliente = otmpCliente;
            oCabDocumentoDTO.FechaHora = DateTime.Now;
            oCabDocumentoDTO.IGV = oFacturacionBL.IGV;
            oCabDocumentoDTO.Subtotal = oFacturacionBL.SubTotal;
            oCabDocumentoDTO.Total = oFacturacionBL.Total;
            //Agregamos la cabecera al documento
            oDocumentoDTO.Cabecera = oCabDocumentoDTO;

            //Agregamos el detalle al documento
            oDocumentoDTO.Detalle = oFacturacionBL.GetDetalle();


            if (oFacturacionBL.GuardarDocumento(oDocumentoDTO) == eEstadoProceso.Correctamente)
            {
                MessageBox.Show("Documento Guardado");
            }
        }

       
        

     
    }
}
